package com.cskaoyan.api.controll;

/*
         public final void setDaemon(boolean on)
                           true        false
        1. 将该线程标记为 守护线程 或 用户线程。（我们创建的线程，默认都是用户线程）
        2. 当正在运行的线程都是守护线程时，Java虚拟机退出(java虚拟机终止守护线程)。
        3. 该方法必须在启动线程前调用。

        注意:
           a. 对于 主线程而言main方法执行完了，main线程就执行结束了
           b. 对于 我们自己定义的线程，run 方法执行完了，线程就执行结束了

       使用场景:
          垃圾回收器，就非常适合运行在守护线程中

 */
public class Demo4Daemon {

    public static void main(String[] args) {

        DaemonThread daemonThread = new DaemonThread();
        daemonThread.setName("deamon");

        // 在线程启动之前
        daemonThread.setDaemon(true);

        // 启动线程
        daemonThread.start();

        for (int i = 0; i < 10; i++) {
            System.out.println("main: i = " + i);
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

class DaemonThread extends Thread {


    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(getName() + ": i = " + i);
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
